package top.whysu.rongcloud.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import top.whysu.rongcloud.po.RongCloudGroupMemberPO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author
 * @version 1.00.00
 * @description 融云的群组成员相关dao
 * @copyright
 * @company
 * @date 2021-03-12 16:11
 */
@Mapper
public interface RongCloudGroupMemberDao {
    /**
     * 通过主键查询
     *
     * @param id 主键
     * @return 对象
     */
    RongCloudGroupMemberPO selectById(BigDecimal id);

    /**
     * 通过成员账号和群ID查询
     *
     * @param memberAccount 群成员账号
     * @param groupId       群ID
     * @return 当前账号在该群的属性
     */
    RongCloudGroupMemberPO selectByMemberAccountAndGroupsId(@Param("memberAccount") String memberAccount,
                                                            @Param("groupId") BigDecimal groupId);

    /**
     * 查询列表
     *
     * @param params 参数
     * @return 集合
     */
    List<RongCloudGroupMemberPO> selectList(Map<String, Object> params);

    /**
     * 新增
     *
     * @param rongCloudGroupMemberPO 新增对象
     * @return 影响行数
     */
    int insert(RongCloudGroupMemberPO rongCloudGroupMemberPO);

    /**
     * 更新
     *
     * @param rongCloudGroupMemberPO 更新对象
     * @return 影响行数
     */
    int update(RongCloudGroupMemberPO rongCloudGroupMemberPO);

    /**
     * 通过成员账号和群ID更新
     *
     * @param rongCloudGroupMemberPO 请求参数
     */
    int updateByMemberAccountAndGroupId(RongCloudGroupMemberPO rongCloudGroupMemberPO);

    /**
     * 通过主键删除
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(BigDecimal id);

    /**
     * 通过群ID删除
     *
     * @param groupId 群ID
     * @return 影响行数
     */
    int deleteByGroupId(@Param("groupId") BigDecimal groupId);

    /**
     * 通过群ID和群成员账号集合删除（delete语句不允许使用<if></if>条件判断）
     *
     * @param deleteMemberAccountList 要删除的群成员集合
     * @param groupId                 群ID
     * @return 影响行数
     */
    int deleteByMemberListAndGroupId(@Param("deleteMemberAccountList") List<String> deleteMemberAccountList,
                                     @Param("groupId") BigDecimal groupId);

}